package cn.gdut.chengcai.base;

import java.io.BufferedReader;
import java.io.File;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;

import org.springframework.http.HttpRequest;

public class FfmpegUtil {

	public static boolean executeCodecs(String srcFilePath) throws Exception {
		
	/*	File directory = new File("");// 参数为空
		String tempPath = System.getProperty("user.dir");*/
		String ffmpegPath =  "H:\\workspace\\chengcai\\ffmpeg\\ffmpeg.exe";
		boolean mark = true;
		if (isCanConvert(srcFilePath) && mark) {
			mark = convertMP4(ffmpegPath, srcFilePath);
			// mark = this.cutPic(ffmpegPath, srcFilePath, mediaPicPath);
		} else {
			System.out.println("该视频格式无法转换");
			mark = false;
		}
		deleteFile(srcFilePath);
		return mark;
	}

	public static boolean isCanConvert(String file) {
		boolean result = false;
		String ext = file.substring(file.lastIndexOf(".") + 1, file.length()).toLowerCase();
		// ffmpeg能解析的格式：（asx，asf，mpg，wmv，3gp，mp4，mov，avi，flv等）
		if (ext.equals("avi")) {
			result = true;
		} else if (ext.equals("mpg")) {
			result = true;
		} else if (ext.equals("wmv")) {
			result = true;
		} else if (ext.equals("3gp")) {
			result = true;
		} else if (ext.equals("mov")) {
			result = true;
		} else if (ext.equals("mp4")) {
			result = true;
		} else if (ext.equals("asf")) {
			result = true;
		} else if (ext.equals("asx")) {
			result = true;
		} else if (ext.equals("flv")) {
			result = true;
		}
		return result;
	}

	private static boolean convertMP4(String ffmpegPath, String srcFilePath) {
		int index = srcFilePath.lastIndexOf(".");
		String codcFilePath = srcFilePath.substring(0, index) + ".mp4";
		File file = new File(ffmpegPath);
		File srcFile = new File(srcFilePath);
		if (file.exists()) {
			System.out.println("转换工具存在");
		}
		if (srcFile.exists()) {
			System.out.println("源视频存在");
		}
		// 创建一个List集合来保存转换视频文件为flv格式的命令
		List<String> convert = new ArrayList<String>();
		convert.add(ffmpegPath); // 添加转换工具路径
		convert.add("-i"); // 添加参数＂-i＂，该参数指定要转换的文件
		convert.add(srcFilePath); // 添加要转换格式的视频文件的路径
		convert.add("-b");
		convert.add("300K");
		convert.add("-s");
		convert.add("1280x720");
		convert.add("-f");
		convert.add("h264");
		convert.add("-ab");
		convert.add("32K");
		convert.add("-ar"); // 设置声音的采样频率
		convert.add("24000");
		convert.add("-acodec");
		convert.add("aac");
		convert.add("-strict");
		convert.add("-2");
		convert.add("-y"); // 添加参数＂-y＂，该参数指定将覆盖已存在的文件
		convert.add(codcFilePath);

		boolean mark = true;
		try {
			Process proc = new ProcessBuilder(convert).redirectErrorStream(true).start();
			BufferedReader stdout = new BufferedReader(new InputStreamReader(proc.getInputStream()));
			String line;
			while ((line = stdout.readLine()) != null) {
				System.out.println(line);
			}
		} catch (Exception e) {
			mark = false;
			System.out.println(e);
			e.printStackTrace();
		}
		return mark;
	}

	public static void deleteFile(String srcFilePath) {
		File file = new File(srcFilePath);
		if (file.exists()) {
			file.delete();
		}

	}

}
